import { Message } from 'element-ui'
// 导入路由
import router from './router'
// 导入仓库
import store from './store'
// import { removeToken } from './utils/auth'

// 声明白名单
const whiteList = ['/login', '/404']
// 注册导航守卫
router.beforeEach(async(to, from, next) => {
  const _token = store.getters.token
  // 判断是否有token
  if (_token) {
    // 用户信息判断token是否正确
    if (store.getters.isLogin && to.path === '/login') {
      return next('/')
    }
    // 不是前往登录页
    if (store.getters.isLogin) {
      return next()
    }
    // 用户信息获取不到，token有问题
    try {
      // 尝试重新获取信息
      await store.dispatch('user/getUserInfo')
      // 倒着说明信息获取到了
      await store.dispatch('permission/filterRouter')
      // 如果是去登录页  直接跳转首页
      // if (to.path === 'login') {
      //   return next('/')
      // }
      // 如果是去其它页面，直接放行
      return next(to)
    } catch (error) {
      // 说明token出了问题
      // 用仓库方法删除token
      store.dispatch('user/logOut')
      // 提示用户
      Message.error('请重新登录！')
      // 回到登录页
      if (to.path === '/login') {
        // 如果是直接去登录页则直接放行
        return next()
      }
      // 不是直接去登录页，则让其跳回原来页面
      return next('/login?redirect=' + to.fullPath)
    }
    // 判断是不是登录页
    // if (to.path === '/login') {
    //   // 说明已经登录，直接去首页
    //   return next('/')
    // }
    // // 不是登录页
    // return next()
  }
  // 没有token
  // 判断是不是在白名单
  if (whiteList.includes(to.path)) {
    return next()
  }
  // 不在白名单，且没有token
  next('/login')
})
